package lx;

import java.util.ArrayList;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public class demo2 {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
        Student s1 = new Student("zhangsan", 23);
        Student s2 = new Student("lisi", 24);
        Student s3 = new Student("wangwu", 25);
        list.add(s1);
        list.add(s2);
        list.add(s3);
        Map<String, Integer> newmap =
                list.stream()
                .filter(student -> student.getAge() >= 24)
                .collect(Collectors.toMap(new Function<Student, String>() {
                    @Override
                    public String apply(Student student) {
                        return student.getName();
                    }
                }, new Function<Student, Integer>() {
                    @Override
                    public Integer apply(Student student) {
                        return student.getAge();
                    }
                }));
        System.out.println(newmap);
        System.out.println("-----------------");
        //lambda表达式

       /* toMap:参数一:表示键的生成规则
        参数二:表示值的生成规则

        参数一:
        Function泛型一:表示流中的每一个数据的类型
        泛型二:表示Map集合中键的数据类型

        方法apply形参:依次表示流里的每一个数据
        方法体: 生成键的代码
        返回值:已经生成的键


        参数二:
        Function泛型一:表示流中的每一个数据的类型
        泛型二:表示Map集合中值的数据类型

        方法apply形参:依次表示流里的每一个数据
        方法体: 生成值的代码
        返回值:已经生成的值

          */
        Map<String, Integer> newmap2 = list.stream()
                .filter(student -> student.getAge() >= 24)
                .collect(Collectors
                        .toMap(student -> student.getName(),
                        student -> student.getAge()));
        System.out.println(newmap2);

    }
}
